/*
 * 使用过C++的朋友大概对迭代器模式都不会太陌生。这主要是因为我们在编写代码的时候离不开迭代器，
 *
 * 队列有迭代器，向量也有迭代器。那么，为什么要迭代器呢？这主要是为了提炼一种通用的数据访问方法。
 *
 * 比如说，现在有一个数据的容器，
 */

typedef struct container
{
	int * pdata;
	int size;
	int lenght;

	Interator * (*create_new_interator)(struct container * pcontainer);
	int (*get_first)(struct container * pcontainer);
	int (*get_last)(struct container * pcontainer);
}container;

/*
 * 我们看到，容器可以创建迭代器。那什么是迭代器呢？ 
 */
typedef struct interator
{
	void * pvector;
	int index;

	int (*get_first)(struct interator * pinterator);
	int (*get_last)(struct interator * pinterator);
}interator;

/*
 * 我们看到，容器有get_first，迭代器也有get_first，这中间有什么区别？ 
 */
int vector_get_first(struct container * pcontainer);
{
	assert(NULL != pcontainer);
	return pcontainer->pdata[0];
}

int vector_get_last(struct container * pcontainer)
{
	assert(NULL != pcontainer);
	return pcontainer->pdata[pcontainer->size - 1];
}

int vector_inerator_get_first(struct interator * pinterator)
{
	container * pcontainer;
	assert(NULL != pinterator && NULL != pinterator->pvector);
	return pcontainer->get_first(pcontainer);
}

int vector_interator_get_last(struct interator * pinterator)
{
	container * pcontainer;
	assert(NULL != pinterator && NULL != pinterator->pvector);
	return pcontainer->get_last(pcontainer);
}

/*
 * 看到上面的代码之后，我们发现迭代器的操作实际上也是对容器的操作而已。
 */
